2017-09-18 9 views
-1

私はhttpurlconnectionを使用して非同期タスクを呼び出そうとしています。私はJsonデータをカスタムリストビューを作成しているアダプタに供給したい。しかし、私のアプリはクラッシュしています。私はこのスタックオーバーフローについて議論された多くの異なるコードを試しましたが、私はそれを理解できません。私はそれが間違っているコードか一般的に私のロジックであるかどうかはわかりません。私はAndroidの開発に関しては素人ですので、本当に助けに感謝します。HttpUrlConnectionを使用したAndroid Asyncタスク

これはasync関数が宣言されているクラスであり、フラグメントの一部です。

public class Movies extends Fragment { 

ListView List; 
ListAdapter ladapter; 
ArrayList<info> data; 

public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { 

    View view = inflater.inflate(R.layout.activity_movies, container, false); 
    movielist mv=new movielist(); 
    Toast.makeText(getContext(), "calling", Toast.LENGTH_LONG).show(); 
    mv.execute("myurl"); 
    return view; 
} 

public class movielist extends AsyncTask<String, Void, String> { 
    HttpURLConnection urlConnection; 
    @Override 
    protected String doInBackground(String... args) { 

     String result = null; 

     try { 
      URL myurl=new URL(args[0]); 
      HttpURLConnection urlConnection = (HttpURLConnection) myurl 
        .openConnection(); 
       urlConnection.setRequestMethod("GET"); 
       urlConnection.setDoInput(true); 
       urlConnection.connect(); 
       InputStream is=urlConnection.getInputStream(); 
       if (is != null) { 
       StringBuilder sb = new StringBuilder(); 
       String line; 
       try { 
        BufferedReader reader = new BufferedReader(
        new InputStreamReader(is)); 
        while ((line = reader.readLine()) != null) { 
         sb.append(line); 
        } 
        reader.close(); 
       } finally { 
        is.close(); 
       } 
       result = sb.toString(); 
      } 
     }catch (Exception e){ 
      result=null; 
     } 
     return result; 
    } 


    @Override 
    protected void onPostExecute(String result) { 
     Toast.makeText(getContext(), "In post ex", Toast.LENGTH_SHORT).show(); 
      try { 
        String data1 = result; 
        JSONObject jobj = new JSONObject(data1); 
        JSONArray jArray = jobj.getJSONArray("actors"); 
        for (int i = 0; i < jArray.length(); i++) { 
        info information = new info(); 
        JSONObject jrealobj = jArray.getJSONObject(i); 
        information.setTitle(jrealobj.getString("name")); 
        information.setPoster_path(jrealobj.getString("image")); 
        data.add(information); 
       } 
      } catch (JSONException e) {Toast.makeText(getContext(), "Not working", Toast.LENGTH_SHORT).show(); 
      } 
      try { 
       ladapter = new Listadapter(getContext(), data); 
       List.setAdapter(ladapter);}catch (NullPointerException e){Toast.makeText(getContext(), "Null", Toast.LENGTH_SHORT).show();} 
       } 
} 

}

+1

「私のアプリはクラッシュしています。」例外スタックトレースを表示していません。 –

+0

[不幸にもMyAppが停止しました。どうすればこの問題を解決できますか?](https://stackoverflow.com/questions/23353173/unfortunately-myapp-has-stopped-how-can-i-solve-this) –

+1

(1)logcat、 2) 'doInBackground'の内部では、例外を飲み込むことができます。代わりに、アプリがクラッシュして見えるようにすることができます。より良いエラー処理を追加できるようになるまで、 'run newException(e)'を投げてランタイム例外にラップすることができます。 (3) 'result'がnullの場合、' onPostExecute'はNullPointerExceptionでクラッシュします。 – orip

答えて

0

は、マニフェストファイルにインターネットのアクセス許可を追加し、確認してください。

関連する問題