0

今日、このサイトで他の多くの質問を試しましたが、どれも役に立ちませんでした。他の人にも同じ構文を使用しているようですが、送信を押すたびに(テキストフィールドを更新したい場合)、アプリがクラッシュします。 setText()メソッドに対してさまざまな構文を試しましたが、何も機能しませんでした。

事前に助けてくれてありがとう

これは私のメインクラスです

package com.example.myapp;

import android.app.Activity;
import java.io.IOException;
import java.util.ArrayList;

import android.app.Activity;
import android.content.DialogInterface;
import android.content.DialogInterface.OnClickListener;
import android.os.Bundle;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import org.apache.http.HttpResponse;
import org.apache.http.HttpStatus;
import org.apache.http.client.*;
import org.apache.http.client.methods.*;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;

public class TestprojectsActivity extends Activity {

    private int index;
    private int QsClicked = 0;
    private ArrayList<String> categories = new ArrayList<String>();
    private ArrayList<Button> buttons = new ArrayList<Button>();
    Button b1;
    Button b2;
    Button b3;
    Button b4;
    Button changer;
    private int Qselected;
    TextView txt;
    EditText edit;
    private ArrayList<String> questions = new ArrayList<String>();
    private int qnum = 0;

    // updates all the buttons so we can see more categories
    public void updateButtons(View v){
        for(int i = 0; i < 4; i++){
              if(index >= categories.size()){
                  index = 0;
              }
              buttons.get(i).setText(categories.get(index));
              index++;
          }
    }

    public void Q1(View v){
        setContentView(R.layout.sub);
        Qselected = index;
        //send(null);
    }

    public void Q2(View v){
        setContentView(R.layout.sub);
        Qselected = (index+1);
        //send(null);
    }

    public void Q3(View v){
        setContentView(R.layout.sub);
        Qselected = (index+2);
        //send(null);
    }

    public void Q4(View v){
        setContentView(R.layout.sub);
        Qselected = (index+3);
        //send(null);
    }

    public void send(View v){
        edit.setText("WHY ISNT THIS WORKING?");
        if(qnum < questions.size()){
            txt.setText("i work!");
            qnum++;
        }
        else{
            qnum = 0;
            System.exit(0);
        }
    }


/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    index = 0;
    b1 = (Button) findViewById(R.id.B1);
    buttons.add(b1);
    b2 = (Button) findViewById(R.id.B2);
    buttons.add(b2);
    b3 = (Button) findViewById(R.id.B3);
    buttons.add(b3);
    b4 = (Button) findViewById(R.id.B4);
    buttons.add(b4);
    txt = (TextView) findViewById(R.id.textView1);
    edit = (EditText) findViewById(R.id.editText2);
    categories.add("dumb questions");
    categories.add("smart questions");
    questions.add("hi there, what is your name?");
    questions.add("what did you have for breakfast today?");
    questions.add("how old are you?");
    questions.add("what color is your hair?");
    updateButtons(null);
}
}

これは私のメインのxmlです

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layoutrowtop"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<Button
    android:id="@+id/B4"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="B4"
    android:onClick="Q4" />
<Button
    android:id="@+id/B3"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="B3"
    android:onClick="Q3" />
<Button
    android:id="@+id/B2"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="B2"
    android:onClick="Q2" />
<Button
    android:id="@+id/B1"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="B1"
    android:onClick="Q1" />
<Button
    android:id="@+id/Button05"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:text="More Categories"
    android:onClick="updateButtons" />

</LinearLayout>

これは私のサブxmlです(私はそれを使用するので、別のレイアウトを持つことができます)

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="vertical" >




    <TextView
        android:id="@+id/textView1"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.22"
        android:text="Question"
         />


    <EditText
        android:id="@+id/editText2"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.51"
        android:ems="10"
        android:inputType="text" />


    <Button
        android:id="@+id/send"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_weight="0.08"
        android:text="Send" 
        android:onClick="send" />

    </LinearLayout>
4

3 に答える 3

0

アクティビティのonCreateメソッドで、コンテンツビューをに設定し、テキストを設定するR.layout.mainを検索しTextViewます。TextViewはそのレイアウトに含まれていないため(にあり、R.layout.subに含まれていないR.layout.main)、テキストを設定すると、コンテンツビューがそれを含む新しいレイアウトとして設定されますが、テキストが表示されますnull(すでに検索しています)。メソッド内で参照がnullで初期化されるようにします)。NullPointerExceptionTextViewonCreate

解決策は、新しいコンテンツview()を設定したTextView に検索することです。次に例を示します。R.layout.sub

public void send(View v){
        txt = (TextView) findViewById(R.id.textView1);
        edit = (EditText) findViewById(R.id.editText2);
        edit.setText("WHY ISNT THIS WORKING?");
        if(qnum < questions.size()){
            txt.setText("i work!");
            qnum++;
        }
        else{
            qnum = 0;
            System.exit(0);
        }
    }

同じことがそのためにも当てはまりEdittextます。

于 2012-06-08T19:02:07.217 に答える
0

Oncreate get call main.xmlがレイアウトxmlであり、R.id.editText2がない場合のように、その時点で編集はnullになります.........。

この行を入れて

edit = (EditText) findViewById(R.id.editText2);

 public void Q1(View v){
        setContentView(R.layout.sub);
        Qselected = index;
 edit = (EditText) findViewById(R.id.editText2); <-----------------here in Q1 Q2 Q3 Q4
        //send(null);
    }
于 2012-06-08T19:07:34.257 に答える
0

アクティビティは main.xml をレイアウトとして使用しており、id の TextView がありませんeditText2。このようなビューを sub.xml に入れるだけでは、ビューは作成されません。レイアウト ファイルを膨張させ、アクティビティのコンテンツ ビューとして設定する必要があります。レイアウトを変更した後に呼び出すfindViewByIdと、すべてがうまくいくはずです。

于 2012-06-08T19:03:51.097 に答える