4

アクティビティで問題が発生していますOrdinazioni.txt。前のアクティビティで正しく書き込まれたすべてのファイルを読み取り、それらをに入れて、そのArrayList各要素をMySQLデータベースに書き込みたいと考えています。

これで、PHPファイルとファイルは正しいので、単独でチェックしましたが、この時点でLogCatはアプリをブロックします。これがアクティビティとLogCatです。

public class AggiungiProdotto extends Activity {

    TextView tv1;
    private static String indirizzo ="http://10.0.2.2/tesina/Aggiungi_Ordinazione";
    FileInputStream in = null;
    InputStreamReader inputStreamReader = new InputStreamReader(in);
    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(indirizzo);
    StringBuilder sb = new StringBuilder();
    int Tavolo = 1;
    String line;
    public ArrayList<String> Lettura = new ArrayList<String>();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.aggiungi_prodotto);
        Invio();
    }

    public void Invio() {
        try {
            FileInputStream in = openFileInput("Ordinazioni.txt");
            while ((line = bufferedReader.readLine()) != null) {
                Lettura.add(line);
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        Thread thread = new Thread() {

            @Override
            public void run() {
                try {
                    for (int i = 0; i < Lettura.size(); i++) {
                        List<NameValuePair> Comanda = new ArrayList<NameValuePair>(2);
                        Comanda.add(new BasicNameValuePair("Nome", Lettura.get(i)));
                        Comanda.add(new BasicNameValuePair("Tavolo",
                                Integer.toString(Tavolo).trim()));

                        httppost.setEntity(new UrlEncodedFormEntity(Comanda));

                        ResponseHandler<String> responseHandler =
                                new BasicResponseHandler();
                        final String Risposta = httpclient.execute(httppost,
                                responseHandler);
                        tv1 = (TextView) findViewById(R.id.tv1);
                        tv1.setText("Response : " + Risposta);
                    }
                } catch (ClientProtocolException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }
        };

        thread.start();
    }
}

LogCatエラー:

03-14 18:40:42.028: E/AndroidRuntime(772): FATAL EXCEPTION: main
03-14 18:40:42.028: E/AndroidRuntime(772): java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.gabriele.tesina/com.gabriele.tesina.AggiungiProdotto}: java.lang.NullPointerException: lock == null
03-14 18:40:42.028: E/AndroidRuntime(772):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2106)
03-14 18:40:42.028: E/AndroidRuntime(772):  at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2230)
03-14 18:40:42.028: E/AndroidRuntime(772):  at android.app.ActivityThread.access$600(ActivityThread.java:141)
03-14 18:40:42.028: E/AndroidRuntime(772):  at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1234)
03-14 18:40:42.028: E/AndroidRuntime(772):  at android.os.Handler.dispatchMessage(Handler.java:99)
03-14 18:40:42.028: E/AndroidRuntime(772):  at android.os.Looper.loop(Looper.java:137)
03-14 18:40:42.028: E/AndroidRuntime(772):  at android.app.ActivityThread.main(ActivityThread.java:5039)
03-14 18:40:42.028: E/AndroidRuntime(772):  at java.lang.reflect.Method.invokeNative(Native Method)
03-14 18:40:42.028: E/AndroidRuntime(772):  at java.lang.reflect.Method.invoke(Method.java:511)
03-14 18:40:42.028: E/AndroidRuntime(772):  at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:793)
03-14 18:40:42.028: E/AndroidRuntime(772):  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:560)
03-14 18:40:42.028: E/AndroidRuntime(772):  at dalvik.system.NativeStart.main(Native Method)
03-14 18:40:42.028: E/AndroidRuntime(772): Caused by: java.lang.NullPointerException: lock == null
03-14 18:40:42.028: E/AndroidRuntime(772):  at java.io.Reader.<init>(Reader.java:64)
03-14 18:40:42.028: E/AndroidRuntime(772):  at java.io.InputStreamReader.<init>(InputStreamReader.java:122)
03-14 18:40:42.028: E/AndroidRuntime(772):  at java.io.InputStreamReader.<init>(InputStreamReader.java:59)
03-14 18:40:42.028: E/AndroidRuntime(772):  at com.gabriele.tesina.AggiungiProdotto.<init>(AggiungiProdotto.java:32)
03-14 18:40:42.028: E/AndroidRuntime(772):  at java.lang.Class.newInstanceImpl(Native Method)
03-14 18:40:42.028: E/AndroidRuntime(772):  at java.lang.Class.newInstance(Class.java:1319)
03-14 18:40:42.028: E/AndroidRuntime(772):  at android.app.Instrumentation.newActivity(Instrumentation.java:1054)
03-14 18:40:42.028: E/AndroidRuntime(772):  at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2097)

私は何を間違っているのですか?

4

3 に答える 3

11
FileInputStream in = null;
InputStreamReader inputStreamReader = new InputStreamReader(in);

ここに問題があると思います。InputStreamReaderにあるFileInputStreamNULLを追加します。

また、あなたのコードはもっと厄介です。ここを見て

tv1 = (TextView) findViewById(R.id.tv1);
tv1.setText("Response : " + Risposta);

ワーカースレッドからUIを更新しようとしているので、最初の問題を修正する場合、次の問題はこれになります。

ワーカースレッドからUIを使用してアクションを実行することはできません。それは許可されていません。origin(UI)スレッドのみがUIでアクションを実行できます。

したがって、それを機能させたい場合は、通常のスレッドではなく、UIスレッドですでに実行されているrunOnUiThread()を使用する必要があります。

注:コードを改善するには、AsyncTaskを使用してインターネットでアクションを実行し、一部のアクションの実行中または実行後にUIの更新を実行することをお勧めします。AsyncTaskはあなたのようなもののために指定されています。これまでに実装したことがない場合は、LarsVogelによる優れたチュートリアルがあります。

于 2013-03-14T18:53:23.690 に答える
2

指摘された他の問題に加えてTextView、新しいスレッドから更新しようとしていることに注意してください。AndroidのUIシステムはスレッドセーフではないため、次の行は別の問題です。

tv1.setText("Response : " + Risposta);'

コードをあまり再構築することなく、ドキュメントのこの例でこれを解決できます。クラスを使用しHandlerてUIスレッドに戻ります。

于 2013-03-14T18:53:05.033 に答える
0

同様のエラーが発生しました。私が見つけた問題は、MacでAndroid Studioの2つのインスタンスを実行していて、デバイスでアプリケーションを実行しているときにそれらが互いに競合していたことでした。

Android Studioのインスタンスを1つ閉じた後、問題なくアプリを実行できました。

于 2017-05-19T16:37:40.277 に答える