2014-09-08 2 views
-1

여기에이 코드가 있습니다. 아주 잘 작동합니다.JSON 값을리스트 뷰를 사용하지 않고 텍스트 뷰로 출력합니다.

내가는 텍스트 뷰에 JSON의 결과를 표시하려고하지만, 매번 난, 응용 프로그램 충돌을 그렇게하고 난 그것에 대해 많이 검색

솔루션의 대부분의 ListView에 값을 사용하는 방법에 대한 것입니다하지만 난 단지 필요 그 하나 개의 결과와는

public class ProfileActivity extends Activity { 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.view_profile_activity); 
     // we will using AsyncTask during parsing 
     new AsyncTaskParseJson().execute(); 
    } 

// you can make this class as another java file so it will be separated from your main activity. 
    public class AsyncTaskParseJson extends AsyncTask<String, String, String> { 

     final String TAG = "AsyncTaskParseJson.java"; 

     // set your json string url here 
     String yourJsonStringUrl = "http://example.com"; 

     // contacts JSONArray 
     JSONArray dataJsonArr = null; 

     @Override 
     protected void onPreExecute() {} 

     @Override 
     protected String doInBackground(String... arg0) { 

      try { 

       // instantiate our json parser 
       JSONParser jParser = new JSONParser(); 

       // get json string from url 
       JSONObject json = jParser.getJSONFromUrl(yourJsonStringUrl); 

       // get the array of users 
       dataJsonArr = json.getJSONArray("Users"); 

       // loop through all users 
       for (int i = 0; i < dataJsonArr.length(); i++) { 

        JSONObject c = dataJsonArr.getJSONObject(i); 


        String username = c.getString("UserName"); 

        // show the values in our logcat 
        Log.e(TAG, "Username: " + username); 

        TextView lblName = (TextView) findViewById(R.id.name); 
        lblName.setText(username); 

       } 

      } catch (JSONException e) { 
       e.printStackTrace(); 
      } 

      return null; 
     } 

     @Override 
     protected void onPostExecute(String strFromDoInBg) {} 
    } 
} 

JSON이 값 무슨 메신저 JSON에서 검색입니다

{ "Users": [ { "fullName ":"", "UserName ":"admin", "UserRegistered ":"2014-09-07 15:42:39", "EmailAddress ":"[email protected]", "ProfilePicture ":"http://static.adzerk.net/Advertisers/8f5b41b43c804b25b9bed0806b82ac69.gif", "Facebook ":"http://facebook.com", "Twitter ":"http://twitter.com", "LinkedIn ":"http://plus.google.com", "GooglePlus ":"http://linkedin.com", "ProfileHeader ":"User Extra Field", "TotalPosts ":"10" } ] } 

로그 캣 오류

09-08 17:19:56.426: E/AsyncTaskParseJson.java(6729): Username: admin // This to validate the getting value is correct 


09-08 17:19:56.430: W/dalvikvm(6729): threadid=12: thread exiting with uncaught exception (group=0xa624a288) 
09-08 17:19:56.430: E/AndroidRuntime(6729): FATAL EXCEPTION: AsyncTask #1 
09-08 17:19:56.430: E/AndroidRuntime(6729): java.lang.RuntimeException: An error occured while executing doInBackground() 
09-08 17:19:56.430: E/AndroidRuntime(6729):  at android.os.AsyncTask$3.done(AsyncTask.java:299) 
09-08 17:19:56.430: E/AndroidRuntime(6729):  at java.util.concurrent.FutureTask$Sync.innerSetException(FutureTask.java:273) 
09-08 17:19:56.430: E/AndroidRuntime(6729):  at java.util.concurrent.FutureTask.setException(FutureTask.java:124) 
09-08 17:19:56.430: E/AndroidRuntime(6729):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:307) 
09-08 17:19:56.430: E/AndroidRuntime(6729):  at java.util.concurrent.FutureTask.run(FutureTask.java:137) 
09-08 17:19:56.430: E/AndroidRuntime(6729):  at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:230) 
09-08 17:19:56.430: E/AndroidRuntime(6729):  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1076) 
09-08 17:19:56.430: E/AndroidRuntime(6729):  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:569) 
09-08 17:19:56.430: E/AndroidRuntime(6729):  at java.lang.Thread.run(Thread.java:856) 
09-08 17:19:56.430: E/AndroidRuntime(6729): Caused by: android.view.ViewRootImpl$CalledFromWrongThreadException: Only the original thread that created a view hierarchy can touch its views. 
09-08 17:19:56.430: E/AndroidRuntime(6729):  at android.view.ViewRootImpl.checkThread(ViewRootImpl.java:4607) 
09-08 17:19:56.430: E/AndroidRuntime(6729):  at android.view.ViewRootImpl.invalidateChildInParent(ViewRootImpl.java:867) 
09-08 17:19:56.430: E/AndroidRuntime(6729):  at android.view.ViewGroup.invalidateChild(ViewGroup.java:4066) 
09-08 17:19:56.430: E/AndroidRuntime(6729):  at android.view.View.invalidate(View.java:10250) 
09-08 17:19:56.430: E/AndroidRuntime(6729):  at android.view.View.invalidate(View.java:10205) 
09-08 17:19:56.430: E/AndroidRuntime(6729):  at android.widget.TextView.checkForRelayout(TextView.java:6296) 
09-08 17:19:56.430: E/AndroidRuntime(6729):  at android.widget.TextView.setText(TextView.java:3547) 
09-08 17:19:56.430: E/AndroidRuntime(6729):  at android.widget.TextView.setText(TextView.java:3405) 
09-08 17:19:56.430: E/AndroidRuntime(6729):  at android.widget.TextView.setText(TextView.java:3380) 
09-08 17:19:56.430: E/AndroidRuntime(6729):  at com.twaa9l.photosee.ProfileActivity$AsyncTaskParseJson.doInBackground(ProfileActivity.java:67) 
09-08 17:19:56.430: E/AndroidRuntime(6729):  at com.twaa9l.photosee.ProfileActivity$AsyncTaskParseJson.doInBackground(ProfileActivity.java:1) 
09-08 17:19:56.430: E/AndroidRuntime(6729):  at android.os.AsyncTask$2.call(AsyncTask.java:287) 
09-08 17:19:56.430: E/AndroidRuntime(6729):  at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:305) 
09-08 17:19:56.430: E/AndroidRuntime(6729):  ... 5 more 
+0

wheres the textView? 'onPostExecute'에서'strFromDoInBg' 매개 변수를 사용한다고 가정하면'doInBackground'가'null'을 반환하기 때문에 항상'null'을 반환합니다. – Spurdow

+0

@Spurdow 레이아웃 파일에, 나는 많은 솔루션을 시도하고 나를 위해 작동하지 않았다 그래서 만약 누군가가 그것을 해결하는 방법을 알고 코드를 게시 할 수 있습니다. –

+0

충돌에 대한 기록을 제공해 주시겠습니까? – grattmandu03

답변

0

귀하의 LogCat에 나와 있습니다. doInBackground에서 텍스트 뷰를 업데이트 할 수 없습니다. onPostExecute에서 업데이트합니까

+0

이 작업은 onPostExcute'TextView lblName = (TextView) findViewById (R.id.name);에서 수행하려고합니다. lblName.setText (사용자 이름);'이클립스 –

+0

성공에 성공하면, onCreate 앞에'public String username;'을 넣고 이것을 onPostExecute 안에 넣습니다.'TextView lblName = (TextView) findViewById (R.id.name); lblName.setText (username);'여기에서 문자열 단어를 제거했습니다. String username = c.getString ("UserName"); 그리고 이제는 charm과 같이 작동합니다. –

0

"firstname"과 "lastname"은 getString이지만 사용자의 json 데이터에는 해당 키가 없습니다.

+0

LogCat 보고서 –

+0

으로 업데이트 된 코드를 확인하십시오. 잘못된보기를 참조합니다. 내 생각 엔'TextView lblName = (TextView) findViewById (R.id.name); '와 관련이있다. 아마 백그라운드 클래스가 레이아웃 파일을 참조하지 않는다는 것과 관련이 있습니다. – erad

+0

코드를 옮겼으므로 그렇게 생각하지 않습니다.'TextView lblName = (TextView) findViewById (R.id.name); (on) 'onCreate' 안에있는 lblName.setText ("Hello");'그리고 다시 실행하면 textView 내부에 hello 단어를 표시하지 않고 정상적으로 작동 함 –

관련 문제