0
ネットワークリクエストにhttpokライブラリを使用しています。コードは、ID、名前、年齢などを送信すると問題なく動作します しかし、 "encodedPhotoString"を送信すると、 イメージの長い文字列がサーバーにアップロードされ、約8000文字のコードがjava.netを投げています.SocketTimeoutException:タイムアウト 例外。私は接続のタイムアウトを変更しようとしましたが、それは私のために働いていないタイムアウトを読み取ります。私はnamecheap.comホスティングサーバーを使用しています。 この問題を手伝ってください。ありがとうございました。長いエンコードされた文字列をサーバーにアンドロイドでアップロード中のjava.net.SocketTimeoutException
public class AddUserAsync extends AsyncTask<Void,Void,Void> {
OkHttpClient client=null;
RequestBody formBody=null;
Request request=null;
JSONObject json = null;
String fromServer = "";
@Override
protected void onPreExecute() {
super.onPreExecute();
pDialog = new ProgressDialog(UploadImage.this);
pDialog.setMessage("Creating Account...");
pDialog.setIndeterminate(false);
pDialog.setCancelable(false);
pDialog.show();
}
@Override
protected Void doInBackground(Void... voids) {
GetUserDetails();
GenerateGCMID();
email= email.trim().toLowerCase();
latitude = GPSTracker.getLatitude();
longitude = GPSTracker.getLongitude();
client = new OkHttpClient().newBuilder().readTimeout(30,TimeUnit.SECONDS).connectTimeout(30,TimeUnit.SECONDS).build();
formBody = new FormBody.Builder()
.add("ID",ID)
.add("Name",name)
.add("email",email)
.add("password",password)
.add("age",age)
.add("number",number)
.add("bloodgroup",bloodgroup)
.add("lat",latitude+"")
.add("longi",longitude+"")
.add("image",encodedPhotoString)
.build();
request = new Request.Builder()
.url("http://faceblood.website/blood_app/Adduser.php")
.post(formBody)
.build();
try {
Response response = client.newCall(request).execute();
String res = response.body().string();
json = new JSONObject(res);
fromServer = json.getString("added");
Log.e("stringtest",json.getString("added"));
} catch (IOException e) {
Log.e("IOException",e.toString());
e.printStackTrace();
} catch (JSONException e) {
Log.e("JSONException",e.toString());
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
super.onPostExecute(aVoid);
pDialog.dismiss();
Log.e("fromServer",fromServer);
if(fromServer.equals("addeduser")){
Toast.makeText(getBaseContext(), "Created Successfully", Toast.LENGTH_LONG).show();
onSignupSuccess();
}else {
Toast.makeText(getBaseContext(), "Network problem. Try again", Toast.LENGTH_LONG).show();
}
}
}
<?php
require "conn.php";
$id = $_POST["ID"];
$name = $_POST["Name"];
$email = $_POST["email"];
$password = $_POST["password"];
$age = $_POST["age"];
$number = $_POST["number"];
$blood = $_POST["bloodgroup"];
$latitude = $_POST["lat"];
$longitude = $_POST["longi"];
$image = $_POST["image"];
$splitEmail = explode('@', $email);
$imageValue = base64_decode($image);
$image = $splitEmail[0].".jpg";
$path = "images/".$image;
file_put_contents($path, $imageValue);
$sql = "INSERT INTO UserDetails (ID,Name,email,password,age,number,bloodgroup,lat,longi,image)
VALUES ('$id','$name','$email','$password','$age','$number','$blood','$latitude','$longitude','$image')";
\t
if ($conn->query($sql) === TRUE) {
$response["added"] = "addeduser";
} else {
}
echo json_encode($response);
$conn->close();
?>
8000文字は長くない設定を忘れてしまいました。この問題は、ネットワーク上の何かが原因で発生したもので、実際にサーバーに接続していないか、サーバーが応答していないためです。私はあなたのサーバー側をデバッグしたいと思います。 –
私はデータがうまく格納されるたびにフォトストリングをアップロードしなければ、サーバーの問題ではないと思います。さらに、サーバー側の私のコードもテストされています。より明確に私はそのコードをアップロードしています。 –
@ GabeSechanも同様にサーバー側のコードを見ることができます。更新しました。 –