0

アプリで作業していて、奇妙なエラーが発生しています。これまでにアプリのテストに使用された 3 台のデバイスのうち 2 台は、ログイン ボタンがタップされて新しいアクティビティが開始されると、完全に機能します。動作する 2 台の電話は両方とも Ice Cream Sandwhich で動作し、3 台​​目の電話 (私に問題を引き起こしている電話) は JellyBean で動作しています。

JellyBean フォンを使用してログイン ボタンをタップすると、次のようになります。

Java (登録ページ)

           // Register button
            TextView main_body_register_button = new TextView(this);
             main_body_register_button.setBackgroundResource(R.drawable.register_btn);
             main_body_register_button.setOnClickListener(new View.OnClickListener() {
                    public void onClick(View v) {
                        // Post to the MySQL database
                        class sendtask extends AsyncTask<String, Void, String> {
                            protected String doInBackground(String... url) {
                                HttpClient httpClient = new DefaultHttpClient();
                                    HttpPost httpPost = new HttpPost("http://website.com/register.php");  
                                        List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();  
                                            nameValuePairs.add(new BasicNameValuePair("number", ""+main_body_phone_input.getText().toString()));

                                            try {
                                                httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
                                            } catch (UnsupportedEncodingException e) {
                                                e.printStackTrace();
                                            } 
                                            try {
                                                httpClient.execute(httpPost);
                                            } catch (ClientProtocolException e) {
                                                e.printStackTrace();
                                            } catch (IOException e) {
                                                e.printStackTrace();
                                            }
                                                return "";
                            }
                                protected void onPostExecute(String result) {
                                    if (main_body_phone_input.getText().toString().compareTo("012-345-6789")==0) {
                                        // Phone number: Empty
                                        Intent base_account_register = new Intent(base_account_register.this,base_account_register.class);
                                        startActivity(base_account_register);
                                    } else if (main_body_phone_input.getText().toString().compareTo("012-345-6789")!=0) {
                                        // Switch to main page
                                        Intent TellATextActivity = new Intent(base_account_register.this,TellATextActivity.class);
                                         ownAddress  = ""+main_body_phone_input.getText().toString();
                                        startActivity(TellATextActivity);
                                    }
                                }
                        }
                            new sendtask().execute("Registration form");
                        // End
                    }
             });
           // END

Java (OnCreate TellATextActivity)

   public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    // Global variables
    Bundle bundle = getIntent().getExtras();
    final String ownAddress  = bundle.getString("session_number");

       // MAIN
       TextView main_message = new TextView(this);
            // Select and parse the most recent message
            Uri uriSMS = Uri.parse("content://sms/");
            Cursor cur = getContentResolver().query(uriSMS, null, null, null, null);

            // EDIT IN          
            if (cur != null && cur.moveToFirst()) {
             do {
              // Inflate your data
             } while (cur.moveToNext());
            }
             cur.close()
            // END

            // EDIT OUT
            cur.moveToNext();
            cur.moveToNext();
            // END

            String body = cur.getString(cur.getColumnIndex("body"));
            String add = cur.getString(cur.getColumnIndex("address"));
             reply_address = "" +add;
            String time = cur.getString(cur.getColumnIndex("date"));
            String protocol = cur.getString(cur.getColumnIndex("protocol"));
            String contactName = "";

            Uri personUri = Uri.withAppendedPath( ContactsContract.PhoneLookup.CONTENT_FILTER_URI, Uri.encode(add));
                Cursor c = getContentResolver().query(personUri, new String[] { PhoneLookup.DISPLAY_NAME }, null, null, null );  
                    if( c.moveToFirst() ) {
                        int nameIndex = c.getColumnIndex(PhoneLookup.DISPLAY_NAME);  
                        contactName = c.getString(nameIndex);
                    }
                    c.close();
                    cur.close();
            String out = "";
            Date d = new Date(Long.valueOf(time));
            // End

            // Determine status of message
            if (protocol == null)
                out = ""+body;
            else 
                out = ""+body;
            // End

            // Create output
            main_message.setHeight(400);
            main_message.setWidth(510);
            main_message.setPadding(10,15,10,0);
            main_message.setTextSize(23);
            main_message.setTextColor(Color.rgb(100,100,100));
            main_message.setText(out);
            // End
        // END

        TextView bottom_reply = new TextView(this);
         bottom_reply.setBackgroundResource(R.drawable.reply);
         bottom_reply.setOnClickListener(new View.OnClickListener() {
             public void onClick(View v) {
                 // Compose a reply
                 Intent intent = new Intent(Intent.ACTION_SENDTO);
                 intent.setData(Uri.parse("smsto:" +reply_address));
                 intent.putExtra("compose_mode", true);
                 startActivity(intent);
             }
         });
        // END

     }

AndroidManifest.xml

    <activity
        android:name=".TellATextActivity"
        android:label="@string/app_name"
        android:configChanges="orientation|keyboardHidden"
        android:screenOrientation="portrait" >
         <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="vnd.android-dir/mms-sms" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.VIEW" />
            <action android:name="android.intent.action.SENDTO" />
            <category android:name="android.intent.category.DEFAULT" />
            <category android:name="android.intent.category.BROWSABLE" />
            <data android:scheme="sms" />
            <data android:scheme="smsto" />
        </intent-filter>
        <intent-filter>
            <action android:name="android.intent.action.SEND" />
            <category android:name="android.intent.category.DEFAULT" />
            <data android:mimeType="text/plain" />
        </intent-filter>
    </activity>

クラッシュレポート

java.lang.RuntimeException: Unable to start activity 
ComponentInfo{tellatext.sms.app/tellatext.sms.app.TellATextActivity}: 
android.database.CursorIndexOutOfBoundsException: Index 1 requested, with a size of 1
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2049)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2083)
at android.app.ActivityThread.access$600(ActivityThread.java:134)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1233)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:4697)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:511)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:790)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:557)
at dalvik.system.NativeStart.main(Native Method)
Caused by: android.database.CursorIndexOutOfBoundsException: Index 1 requested, with a size of 1
at android.database.AbstractCursor.checkPosition(AbstractCursor.java:407)
at android.database.AbstractWindowedCursor.checkPosition(AbstractWindowedCursor.java:136)
at android.database.AbstractWindowedCursor.getString(AbstractWindowedCursor.java:50)
at android.database.CursorWrapper.getString(CursorWrapper.java:114)
at tellatext.sms.app.TellATextActivity.onCreate(TellATextActivity.java:82)
at android.app.Activity.performCreate(Activity.java:4539)
at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1049)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2013)
... 11 more

ここで誰かが私を正しい方向に向けることができますか? 私はすべての選択肢を使い果たしました。この問題について他の誰かの視点が必要です。

ありがとうございました。

4

3 に答える 3

1

コードのどこかで、それが最初のスロットであると考えて、スロット 1 からカーソル項目を要求しています。正しくない。カーソルのインデックスは 0 であるため、0 が最初のスロットです。開始インデックスを 0 に変更してみてください。

編集例:

Cursor cur = null; // Your query not null

if (cur != null && cur.moveToFirst()) {
    do {
        // Inflate your data
    } while (cur.moveToNext());
}
cur.close()
于 2012-12-08T00:01:45.300 に答える
0

この部分にはありません。これは実際には、82行目のonCreateメソッドです。Aedonが提案するように、そこに移動して1を0に変更すると、すべてが機能します。

于 2012-12-08T01:36:39.550 に答える
0

この問題は、誰かが受信トレイに 3 つ未満のテキスト メッセージでアプリを使用していたときに発生していました。受信トレイのカーソルをテキスト メッセージのないスポットに移動すると、そのスポットが存在しなかったためにアプリがクラッシュしました。

于 2012-12-11T18:56:21.913 に答える