2016-12-05 6 views
-1

NetworkOnMainThreadExceptionを使用してアプリケーションを動作させるためにJavaファイルに追加する必要があるコードとコードを教えてくれる人がいますか?アプリが動作を停止したとのメッセージが表示されたときにアプリがクラッシュしました。このアプリを携帯電話で使用できるようにするには、どのコードを追加する必要がありますか?

package com.airrocketapps.matthillman.guessthecelebrity; 

import android.app.Activity; 
import android.graphics.Bitmap; 
import android.graphics.BitmapFactory; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.Menu; 
import android.view.MenuItem; 
import android.view.View; 
import android.widget.Button; 
import android.widget.ImageView; 
import android.widget.Toast; 

import java.io.IOException; 
import java.io.InputStream; 
import java.io.InputStreamReader; 
import java.net.HttpURLConnection; 
import java.net.MalformedURLException; 
import java.net.URL; 
import java.util.ArrayList; 
import java.util.Random; 
import java.util.concurrent.ExecutionException; 
import java.util.regex.Matcher; 
import java.util.regex.Pattern; 


public class MainActivity extends Activity { 

    ArrayList<String> celebURLs = new ArrayList<String>(); 
    ArrayList<String> celebNames = new ArrayList<String>(); 
    int chosenCeleb = 0; 
    int locationOfCorrectAnswer = 0; 
    String[] answers = new String[4]; 

    ImageView imageView; 
    Button button0; 
    Button button1; 
    Button button2; 
    Button button3; 

    public void celebChosen(View view) { 

     if (view.getTag().toString().equals(Integer.toString(locationOfCorrectAnswer))) { 

      Toast.makeText(getApplicationContext(), "Correct!", Toast.LENGTH_LONG).show(); 

     } else { 

      Toast.makeText(getApplicationContext(), "Wrong! It was " + celebNames.get(chosenCeleb), Toast.LENGTH_LONG).show(); 

     } 

     createNewQuestion(); 

    } 

    public class ImageDownloader extends AsyncTask<String, Void, Bitmap> { 


     @Override 
     protected Bitmap doInBackground(String... urls) { 

      try { 

       URL url = new URL(urls[0]); 

       HttpURLConnection connection = (HttpURLConnection) url.openConnection(); 

       connection.connect(); 

       InputStream inputStream = connection.getInputStream(); 

       Bitmap myBitmap = BitmapFactory.decodeStream(inputStream); 

       return myBitmap; 


      } catch (MalformedURLException e) { 

       e.printStackTrace(); 

      } catch (IOException e) { 

       e.printStackTrace(); 

      } 

      return null; 
     } 
    } 


    public class DownloadTask extends AsyncTask<String, Void, String> { 


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

      String result = ""; 
      URL url; 
      HttpURLConnection urlConnection = null; 

      try { 

       url = new URL(urls[0]); 

       urlConnection = (HttpURLConnection)url.openConnection(); 

       InputStream in = urlConnection.getInputStream(); 

       InputStreamReader reader = new InputStreamReader(in); 

       int data = reader.read(); 

       while (data != -1) { 

        char current = (char) data; 

        result += current; 

        data = reader.read(); 
       } 

       return result; 

      } 
      catch (Exception e) { 

       e.printStackTrace(); 

      } 

      return null; 
     } 
    } 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     imageView = (ImageView) findViewById(R.id.imageView); 
     button0 = (Button) findViewById(R.id.button); 
     button1 = (Button) findViewById(R.id.button2); 
     button2 = (Button) findViewById(R.id.button3); 
     button3 = (Button) findViewById(R.id.button4); 

     DownloadTask task = new DownloadTask(); 
     String result = null; 

     try { 

      result = task.execute("http://www.posh24.com/celebrities").get(); 

      String[] splitResult = result.split("<div class=\"sidebarContainer\">"); 

      Pattern p = Pattern.compile("<img src=\"(.*?)\""); 
      Matcher m = p.matcher(splitResult[0]); 

      while (m.find()) { 

       celebURLs.add(m.group(1)); 

      } 

      p = Pattern.compile("alt=\"(.*?)\""); 
      m = p.matcher(splitResult[0]); 

      while (m.find()) { 

       celebNames.add(m.group(1)); 

      } 


     } catch (InterruptedException e) { 

      e.printStackTrace(); 

     } catch (ExecutionException e) { 

      e.printStackTrace(); 

     } 

     createNewQuestion(); 

    } 

    public void createNewQuestion() { 

     Random random = new Random(); 
     chosenCeleb = random.nextInt(celebURLs.size()); 

     ImageDownloader imageTask = new ImageDownloader(); 

     Bitmap celebImage; 

     try { 

      celebImage = imageTask.execute(celebURLs.get(chosenCeleb)).get(); 

      imageView.setImageBitmap(celebImage); 

      locationOfCorrectAnswer = random.nextInt(4); 

      int incorrectAnswerLocation; 

      for (int i=0; i<4; i++) { 

       if (i == locationOfCorrectAnswer) { 

        answers[i] = celebNames.get(chosenCeleb); 

       } else { 

        incorrectAnswerLocation = random.nextInt(celebURLs.size()); 

        while (incorrectAnswerLocation == chosenCeleb) { 

         incorrectAnswerLocation = random.nextInt(celebURLs.size()); 

        } 

        answers[i] = celebNames.get(incorrectAnswerLocation); 


       } 


      } 

      button0.setText(answers[0]); 
      button1.setText(answers[1]); 
      button2.setText(answers[2]); 
      button3.setText(answers[3]); 


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




    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
} 
+0

。それが何を意味するのか調べようとしましたか? – f1sh

+0

はい、私は初心者ですので、コードのどこにあるのか理解できなくなってしまったので、どんな助けもありがとうと思います。 –

答えて

0

コード内には問題はありません。

あなたはこのアプリケーションを実行しようとしているあなたの携帯電話で活躍インターネット接続を持っていることを確認してください。

あなたがインターネットを使用している場合は、あなたのAndroidManifest.xml

<uses-permission android:name="android.permission.INTERNET"/> 

詳細なヘルプにこれを追加することを忘れないでください:あなたはすでに `` NetworkOnMainThreadException``を述べhttps://stackoverflow.com/a/6343299/7004388

+0

私は既にマニフェストにこれを追加しました。あなたの助けをありがとう。 onCreateメソッドが呼び出されたときにアプリをクラッシュさせる可能性のあるものが表示されますか –

関連する問題