2015-05-24 1 views
-1

Я разрабатываю приложение, которое включает в себя загрузку всех контактов на мой сервер, что я делаю, показывает все контакты и отправляет их на мой сервер в виде строки. Вот мой код:Отправка строки в файл PHP через приложение Android

package com.example.core.freemusic; 
import java.io.IOException; 
import android.app.Activity; 
import android.app.ProgressDialog; 
import android.database.Cursor; 
import android.os.AsyncTask; 
import android.os.Bundle; 
import android.provider.ContactsContract; 
import android.widget.Button; 
import android.widget.LinearLayout; 
import android.widget.ListView; 
import android.widget.TextView; 
import org.apache.http.client.HttpClient; 
import org.apache.http.client.methods.HttpPost; 
import org.apache.http.impl.client.DefaultHttpClient; 
public class MainActivity extends Activity { 
LinearLayout ll; 
@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 
    ll = (LinearLayout) findViewById(R.id.LinearLayout1); 
    LoadContactsAyscn lca = new LoadContactsAyscn(); 
    lca.execute(); 
} 
class LoadContactsAyscn extends AsyncTask < Void, Void, String > { 
    ProgressDialog pd; 
    @Override 
    protected void onPreExecute() { 
     super.onPreExecute(); 
     pd = ProgressDialog.show(MainActivity.this, "Please Wait",""); 
    } 
    @Override 
    protected String doInBackground(Void...params) { 
     String contacts = ""; 
     Cursor c = getContentResolver().query(ContactsContract.CommonDataKinds.Phone.CONTENT_URI, null, null, null, null); 
     while (c.moveToNext()) { 
      String contactName = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.DISPLAY_NAME)); 
      String phNumber = c.getString(c.getColumnIndex(ContactsContract.CommonDataKinds.Phone.NUMBER)); 
      contacts += contactName + ":" + phNumber + "\n"; 
     } 
     c.close(); 
     return contacts; 
    } 
    @Override 
    protected void onPostExecute(String contacts) { 
     super.onPostExecute(contacts); 
     pd.cancel(); 
     TextView a = (TextView) findViewById(R.id.textView); 
     a.setText(contacts); 
     doInBackground(contacts); 
    } 
    protected void doInBackground(String... params) { 
     HttpClient httpclient = new DefaultHttpClient(); 
     HttpPost httppost = new HttpPost("http://192.168.2.30/b.php?username="+params); 
     try { 
      httpclient.execute(httppost); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
} 

На самом деле код не показывает ошибки, но при запуске его в эмуляторе он выходит из строя. ошибка на LogCat является:

05-24 14:00:57.989 2488-2500/com.example.core.freemusic W/art﹕ Suspending all threads took: 5.841ms 
05-24 14:00:57.992 2488-2500/com.example.core.freemusic I/art﹕ Background partial concurrent mark sweep GC freed 1888(115KB) AllocSpace objects, 0(0B) LOS objects, 50% free, 502KB/1014KB, paused 6.923ms total 95.188ms 
05-24 14:00:58.073 2488-2488/com.example.core.freemusic I/Choreographer﹕ Skipped 37 frames! The application may be doing too much work on its main thread. 
05-24 14:00:58.080 2488-2488/com.example.core.freemusic D/gralloc_goldfish﹕ Emulator without GPU emulation detected. 
05-24 14:00:58.102 2488-2488/com.example.core.freemusic D/AndroidRuntime﹕ Shutting down VM 
05-24 14:00:58.103 2488-2488/com.example.core.freemusic E/AndroidRuntime﹕ FATAL EXCEPTION: main 
Process: com.example.core.freemusic, PID: 2488 
java.lang.IllegalArgumentException: Illegal character in query at index 43: http://192.168.2.30/b.php?username=Sd:(546) 456-4826 
Sad:486-44 
     at java.net.URI.create(URI.java:730) 
     at org.apache.http.client.methods.HttpPost.<init>(HttpPost.java:79) 
     at com.example.core.freemusic.MainActivity$LoadContactsAyscn.onPostExecute(MainActivity.java:64) 
     at com.example.core.freemusic.MainActivity$LoadContactsAyscn.onPostExecute(MainActivity.java:38) 
     at android.os.AsyncTask.finish(AsyncTask.java:632) 
     at android.os.AsyncTask.access$600(AsyncTask.java:177) 
     at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:645) 
     at android.os.Handler.dispatchMessage(Handler.java:102) 
     at android.os.Looper.loop(Looper.java:135) 
     at android.app.ActivityThread.main(ActivityThread.java:5221) 
     at java.lang.reflect.Method.invoke(Native Method) 
     at java.lang.reflect.Method.invoke(Method.java:372) 
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 
05-24 14:01:01.259 2488-2488/com.example.core.freemusic I/Process﹕ Sending signal. PID: 2488 SIG: 9 
05-24 15:24:12.790 2685-2685/com.example.core.freemusic D/gralloc_goldfish﹕ Emulator without GPU emulation detected. 
+1

Вы можете сообщить об ошибке? –

+0

Я отредактировал вопрос с ошибками. – goodperson

+1

ваш журнал ошибок четко говорит 'java.lang.IllegalArgumentException: недопустимый символ в запросе по индексу 43: http://192.168.2.30/b.php?username=Sd:(546) 456-4826' пожалуйста, отлаживайте здесь – Mithun

ответ

1

В вашем Java:

HttpClient client=new DefaultHttpClient(); 
HttpPost postMethod=new HttpPost("http://localhost.index.php"); 
ArrayList<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(); 
nameValuePairs.add(new BasicNameValuePair("username","1234567")); 
nameValuePairs.add(new BasicNameValuePair("password","54321345")); 
postMethod.setEntity(new UrlEncodedFormEntity(nameValuePairs,HTTP.UTF_8)); 
client.execute(getMethod); 

В вашем PHP:

$username = $_POST['username']; 
$password = $_POST['password']; 
0

В состоянии кода ошибки, вам нужно закодировать запрос:

HttpPost httppost = new HttpPost("http://192.168.2.30/b.php?username="+params); 

необходимо изменить до:

HttpPost httppost = new HttpPost("http://192.168.2.30/b.php?username="+java.net.URLEncoder.encode(params[0], "UTF-8")); 
+0

Теперь его ошибка отображения, что 'String [] не может быть преобразована в String' – goodperson

+0

Проверьте обновленный код. Btw, исходя из этой ошибки, вы должны понимать, что это потому, что params - это массив String (проверьте ''] часть. URLEncoder.encode() требует String (не массив String). – ariefbayu