Geri gelmeye devam eden bir sorunla uğraşıyorum ve oldukça sinirlendim. Ben veritabanına JSONObjects göndererek, çevrimiçi buldum bir şablon php webservice üzerinden bağlanmaya çalışıyorum. "Istenmeyen bir akış sonu" olmak üzere sunucudan yanıt kodu almaya çalışırken IOException veya ProtocolException almaya devam ediyorum. Hata mesajı gerçekten şifreli ve hata, java veya PHP kodunda olduğu hakkında hiçbir fikrim yok.ProtokolünException: akışının beklenmedik sonu
Yığın izlemesi:
java.net.ProtocolException: unexpected end of stream
at com.android.okhttp.internal.http.HttpConnection$FixedLengthSink.close(HttpConnection.java:314)
at com.android.okhttp.internal.http.HttpEngine.readResponse(HttpEngine.java:781)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:443)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:388)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:501)
at ske.matej.project.JSONParser.getJSONFromUrl(JSONParser.java:56)
at ske.matej.project.UserFunctions.loginUser(UserFunctions.java:35)
at ske.matej.project.LoginActivity$AttemptLogin.doInBackground(LoginActivity.java:145)
at ske.matej.project.LoginActivity$AttemptLogin.doInBackground(LoginActivity.java:121)
at android.os.AsyncTask$2.call(AsyncTask.java:295)
at java.util.concurrent.FutureTask.run(FutureTask.java:237)
at android.os.AsyncTask$SerialExecutor$1.run(AsyncTask.java:234)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1113)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:588)
at java.lang.Thread.run(Thread.java:818)
JSONParser.java (Ben yorum içeren kusurlu hattı işaretli)
import android.util.Log;
import org.json.JSONException;
import org.json.JSONObject;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
public class JSONParser {
private JSONObject jsonObj = new JSONObject();
private JSONObject json = new JSONObject();
private String email;
private String username;
private String password;
private int objLength;
private static InputStream is = null;
public JSONParser() {
//Default constructor intentionally left empty for now
}
public JSONObject getJSONFromUrl(String _url, JSONObject params) {
// Making HTTP request
try {
URL url = new URL(_url);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
byte[] bytearray = params.toString().getBytes("UTF-8");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod("POST");
conn.setFixedLengthStreamingMode(bytearray.length);
//conn.setRequestProperty("User-Agent", "GYUserAgentAndroid");
conn.setRequestProperty("Content-Length", Integer.toString(bytearray.length));
conn.setRequestProperty("Content-Type", "application/json");
//conn.setUseCaches(false);
System.out.println("Byte array length: "+bytearray.length);
//The offending line
int responseCodeHTTP = conn.getResponseCode();
System.out.println("Responsecode HTTP "+responseCodeHTTP);
OutputStream os = conn.getOutputStream();
os.write(bytearray);
os.flush();
if (responseCodeHTTP == HttpURLConnection.HTTP_OK) {
try {
is = new BufferedInputStream(conn.getInputStream());
BufferedReader reader = new BufferedReader(new InputStreamReader(
is, "UTF-8"), 8);
StringBuilder sb = new StringBuilder();
String line = null;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
is.close();
json = new JSONObject(sb.toString());
Log.e("JSON", json.toString());
}
catch (JSONException e) {
e.printStackTrace();
}
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return json;
}
public byte[] getJSONBytes() {
try {
return jsonObj.toString().getBytes("UTF-8");
}
catch(UnsupportedEncodingException e) {
e.printStackTrace();
return null;
}
}
}
endeksi bir göz alabilir bu yüzden, kod yayınlanmıştır .php (Henüz kodda fazla değişiklik yapmadım, şimdilik sadece bir bağlantı kurmak istiyorum)
<?php
if($_POST != null) {
\t
\t echo json_encode("Status: 200");
\t
\t if (isset($_POST['tag']) && $_POST['tag'] != '') {
// Get tag
$tag = $_POST['tag'];
// Include Database handler
require_once 'DB_Functions.php';
$db = new DB_Functions();
// response Array
$response = array("tag" => $tag, "success" => 0, "error" => 0);
// check for tag type
if ($tag == 'login') {
// Request type is check Login
$email = $_POST['email'];
$password = $_POST['password'];
// check for user
$user = $db->getUserByEmailAndPassword($email, $password);
\t \t
\t \t
\t \t //FOR TESTING PURPOSES: REMOVE LATER
\t \t $user = false;
\t \t
\t \t
if ($user != false) {
// user found
// echo json with success = 1
$response["success"] = 1;
$response["user"]["fname"] = $user["firstname"];
$response["user"]["lname"] = $user["lastname"];
$response["user"]["email"] = $user["email"];
$response["user"]["uname"] = $user["username"];
$response["user"]["uid"] = $user["unique_id"];
$response["user"]["created_at"] = $user["created_at"];
echo json_encode($response);
} else {
// user not found
// echo json with error = 1
$response["error"] = 1;
$response["error_msg"] = "Incorrect email or password!";
echo json_encode($response);
}
}
else if ($tag == 'chgpass'){
$email = $_POST['email'];
$newpassword = $_POST['newpas'];
$hash = $db->hashSSHA($newpassword);
$encrypted_password = $hash["encrypted"]; // encrypted password
$salt = $hash["salt"];
$subject = "Change Password Notification";
$message = "Hello User,nnYour Password is sucessfully changed.nnRegards,nLearn2Crack Team.";
$from = "[email protected]";
$headers = "From:" . $from;
if ($db->isUserExisted($email)) {
$user = $db->forgotPassword($email, $encrypted_password, $salt);
if ($user) {
$response["success"] = 1;
mail($email,$subject,$message,$headers);
echo json_encode($response);
}
else {
$response["error"] = 1;
echo json_encode($response);
}
// user is already existed - error response
}
else {
$response["error"] = 2;
$response["error_msg"] = "User not exist";
echo json_encode($response);
}
}
else if ($tag == 'forpass'){
$forgotpassword = $_POST['forgotpassword'];
$randomcode = $db->random_string();
$hash = $db->hashSSHA($randomcode);
$encrypted_password = $hash["encrypted"]; // encrypted password
$salt = $hash["salt"];
$subject = "Password Recovery";
$message = "Hello User,nnYour Password is sucessfully changed. Your new Password is $randomcode . Login with your new Password and change it in the User Panel.nnRegards,nLearn2Crack Team.";
$from = "[email protected]";
$headers = "From:" . $from;
if ($db->isUserExisted($forgotpassword)) {
$user = $db->forgotPassword($forgotpassword, $encrypted_password, $salt);
if ($user) {
$response["success"] = 1;
mail($forgotpassword,$subject,$message,$headers);
echo json_encode($response);
}
else {
$response["error"] = 1;
echo json_encode($response);
}
// user is already existed - error response
}
else {
$response["error"] = 2;
$response["error_msg"] = "User not exist";
echo json_encode($response);
}
}
else if ($tag == 'register') {
// Request type is Register new user
$fname = $_POST['fname'];
$lname = $_POST['lname'];
$email = $_POST['email'];
$uname = $_POST['uname'];
$password = $_POST['password'];
// check if user is already existed
if ($db->isUserExisted($email)) {
// user is already existed - error response
$response["error"] = 2;
$response["error_msg"] = "User already existed";
echo json_encode($response);
}
else if(!$db->validEmail($email)){
$response["error"] = 3;
$response["error_msg"] = "Invalid Email Id";
echo json_encode($response);
}
else {
// store user
$user = $db->storeUser($fname, $lname, $email, $uname, $password);
if ($user) {
// user stored successfully
$response["success"] = 1;
$response["user"]["fname"] = $user["firstname"];
$response["user"]["lname"] = $user["lastname"];
$response["user"]["email"] = $user["email"];
$response["user"]["uname"] = $user["username"];
$response["user"]["uid"] = $user["unique_id"];
$response["user"]["created_at"] = $user["created_at"];
mail($email,$subject,$message,$headers);
echo json_encode($response);
} else {
// user failed to store
$response["error"] = 1;
$response["error_msg"] = "JSON Error occured in Registartion";
echo json_encode($response);
}
}
} else {
$response["error"] = 3;
$response["error_msg"] = "JSON ERROR";
echo json_encode($response);
}
} else {
echo "";
}
}
?>
Gerçekten verebilir herhangi bir yardım için teşekkür ederiz. Özellikle de Android geliştirme ve PHP'de hala bir noob olduğum için.
Ben bu işe yaramazsa korkuyorum. java.io.IOException: bağlantısında beklenmeyen akış sonu {192.168.1.146:3306, proxy = DIRECT @ hostAddress = 192.168.1.146 cipherSuite = none protocol = http/1.1} (dönüşüm sayısı = 0) 'tekrar aynı satırda – MatejS
de bu, sunucuya gönderilmiyor verileri düzeltildi. şimdi php kodunda bir sorun var ... şunu kaldırmayı deneyin: echo json_encode ("Durum: 200"); – djodjo
Bu işe yaramadı, ancak bunu yığın izinde biraz daha aşağıda buldum: 'Neden: java.io.EOFException: \ n bulunamadı: size = 91 content = 57000000ff6a04486f73742027616e64726f69642d3939363936623535643931 ... 04-06 17: 34: 28.457 12891-13068/ske.matej.project W/System.err: com.android.okhttp.okio.RealBufferedSource.readUtf8LineStrict (RealBufferedSource.java:200) 04126 17: 34: 28.457 12891-13068/ske.matej.project W/System.err: com.android.okhttp.internal.http.HttpConnection.readResponse (HttpConnection.java:191) 04-06 17: 34: 28.457 12891-13068/ske.matej.project W/System.err: \t ... 16 tane daha – MatejS