2012-01-03 11 views
0

私は今一週間働いているアプリがあります。残念ながら、私は本当に今何をすべきか分からないので、解決するのが難しいエラーがあります。下のLogCatリストのコピーを参照してください。現在の問題が存在しているスクリプトのThreadException - ウェブサイトからデータを受け取りようとしています

01-04 00:14:23.662: E/log_tag(3073): Error in http connectionandroid.os.NetworkOnMainThreadException 
01-04 00:14:23.662: E/log_tag(3073): Error converting result java.lang.NullPointerException 
01-04 00:14:23.672: D/AndroidRuntime(3073): Shutting down VM 
01-04 00:14:23.672: W/dalvikvm(3073): threadid=1: thread exiting with uncaught exception (group=0x409961f8) 
01-04 00:14:23.692: E/AndroidRuntime(3073): FATAL EXCEPTION: main 
01-04 00:14:23.692: E/AndroidRuntime(3073): java.lang.RuntimeException: Unable to start activity ComponentInfo{united.aristal.freewallet/united.aristal.freewallet.GroupHistory}: java.lang.NullPointerException 
01-04 00:14:23.692: E/AndroidRuntime(3073):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1955) 
01-04 00:14:23.692: E/AndroidRuntime(3073):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:1980) 
01-04 00:14:23.692: E/AndroidRuntime(3073):  at android.app.ActivityThread.access$600(ActivityThread.java:122) 
01-04 00:14:23.692: E/AndroidRuntime(3073):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1146) 
01-04 00:14:23.692: E/AndroidRuntime(3073):  at android.os.Handler.dispatchMessage(Handler.java:99) 
01-04 00:14:23.692: E/AndroidRuntime(3073):  at android.os.Looper.loop(Looper.java:137) 
01-04 00:14:23.692: E/AndroidRuntime(3073):  at android.app.ActivityThread.main(ActivityThread.java:4340) 
01-04 00:14:23.692: E/AndroidRuntime(3073):  at java.lang.reflect.Method.invokeNative(Native Method) 
01-04 00:14:23.692: E/AndroidRuntime(3073):  at java.lang.reflect.Method.invoke(Method.java:511) 
01-04 00:14:23.692: E/AndroidRuntime(3073):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784) 
01-04 00:14:23.692: E/AndroidRuntime(3073):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551) 
01-04 00:14:23.692: E/AndroidRuntime(3073):  at dalvik.system.NativeStart.main(Native Method) 
01-04 00:14:23.692: E/AndroidRuntime(3073): Caused by: java.lang.NullPointerException 
01-04 00:14:23.692: E/AndroidRuntime(3073):  at org.json.JSONTokener.nextCleanInternal(JSONTokener.java:116) 
01-04 00:14:23.692: E/AndroidRuntime(3073):  at org.json.JSONTokener.nextValue(JSONTokener.java:94) 
01-04 00:14:23.692: E/AndroidRuntime(3073):  at org.json.JSONArray.<init>(JSONArray.java:87) 
01-04 00:14:23.692: E/AndroidRuntime(3073):  at org.json.JSONArray.<init>(JSONArray.java:103) 
01-04 00:14:23.692: E/AndroidRuntime(3073):  at united.aristal.freewallet.GroupHistory.retrieveGroupInfo(GroupHistory.java:295) 
01-04 00:14:23.692: E/AndroidRuntime(3073):  at united.aristal.freewallet.GroupHistory.onCreate(GroupHistory.java:95) 
01-04 00:14:23.692: E/AndroidRuntime(3073):  at android.app.Activity.performCreate(Activity.java:4465) 
01-04 00:14:23.692: E/AndroidRuntime(3073):  at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049) 
01-04 00:14:23.692: E/AndroidRuntime(3073):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:1919) 
01-04 00:14:23.692: E/AndroidRuntime(3073):  ... 11 more 

コピー:

/******************************************************************** 
* RETRIEVING GROUP INFO            * 
*********************************************************************/ 
public void retrieveGroupInfo(){ 

    try{ 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("link"); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 
     HttpResponse response = httpclient.execute(httppost); 
     HttpEntity entity = response.getEntity(); 
     is = entity.getContent(); 
     } 
    catch(Exception e){ 
     Log.e("log_tag", "Error in http connection"+e.toString()); 
    } 

    try{ 
     BufferedReader reader = new BufferedReader(new InputStreamReader(is,"iso-8859-1"),8); 
      sb = new StringBuilder(); 
      sb.append(reader.readLine() + "\n"); 
      String line="0"; 

      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n\n"); 
      } 

      is.close(); 
      result = sb.toString(); 
    } 
    catch(Exception e){ 
     Log.e("log_tag", "Error converting result "+e.toString()); 
    } 

    try{ 
     jArray = new JSONArray(result); 
     JSONObject json_data=null; 

     for(int i = 0; i < jArray.length(); i++){ 

      json_data    = jArray.getJSONObject(i);  

      retrievedId.add(json_data.getInt("id")); 
      String getDate   = recoverDate(json_data.getString("date")); 
      String getTime   = json_data.getString("time"); 
      String getCategory  = json_data.getString("category"); 
      String getObjectName = json_data.getString("object_name"); 
      String getObjectVal  = json_data.getString("object_value"); 
      String getValType  = json_data.getString("value_type"); 
      //String getUsername  = json_data.getString("username"); 

      historyItems.add(
        getCategory + "\t: " + getObjectName + "\n" + 
        "Price\t: € " + getObjectVal + "\n" + 
        "Date\t: " + getDate + " " + getTime); 

      historyValueType.add(getValType); 
     } 

     ListView lv = (ListView) findViewById(R.id.listViewMenu); 
      lv.setAdapter(fancyAdapter); 

      lv.setOnItemClickListener(new OnItemClickListener() { 
       public void onItemClick(AdapterView<?> parent, View view, 
        int position, long id) { 

        alertdialogUpdateDelete(position); 
        //showToast(historyItem.get(position).toString()); 
       } 
      }); 
    } 
    catch(JSONException e1){ 
     //Toast.makeText(getBaseContext(), "No Record Found." ,Toast.LENGTH_LONG).show(); 
    } 
    catch (ParseException e1) { 
      e1.printStackTrace(); 
    } 

} 

私は今、本当にイライラだと数時間のために立ち往生ので、私を助けてください。私は確信していませんが、私はスレッドや何かにいくつかの問題があると思いますか?ここで私を助けてくれたThanx。

答えて

3

あなたのコードはメインスレッドでネットワーク接続しようとしています。これはAndroidでは許可されていません。そのため、接続しようとするとandroid.os.NetworkOnMainThreadExceptionが届いています。例外をキャッチしてログに記録すると、コードは引き続きそのコードを使用しようとします。これは、次の問題を引き起こしています。 (接続を行うときに例外が発生した場合は、失敗を報告して接続を読み飛ばすことをお勧めします)。解決策は、ネットワークアクティビティをワーカースレッドに移動することです。これを行うにはAsyncTaskが便利です。詳細については、ガイドトピックProcesses and ThreadsとブログエントリPainless threadingをお読みください。

+0

私は、やっぱりベストを尽くします。 :) – Xarialon

+0

"おそらく失敗を報告し、接続を行うときに例外をキャッチすると接続を読み飛ばすことをお勧めします。" どうすればいいですか?あなたは私に例を教えてくれますか? – Xarialon

+0

@ Xonarial - 'catch'節で' Log.e() 'を呼び出した後、' retrieveGroupInfo'から返ります。 (メソッドを変更して、成功または失敗を示すブール値を返すこともできます)。コードを変更して、 'onCreate'から' retrieveGroupInfo'を呼び出さないようにする必要があることに注意してください。代わりにAsyncTaskを使用すると(私が推奨するように) 'onPostExecute'と書くことで、ユーザに悲しいニュースを伝えるダイアログをポップアップし、ダイアログが閉じるときに' finish() 'を呼び出すことができます。 –

関連する問題