2015-01-12 3 views
0

안녕하세요, 저는 HTTP 프로토콜을 사용하여 원격 서버 및 DB와 통신하는 안드로이드 애플 리케이션 테스트를 개발하고 있습니다. 간단한 로그인 페이지입니다.티타늄 - HTTPClient : 오픈 새 컨트롤러 onload

이제 두 개의 컨트롤러 (및 newuser.js)가 있습니다.

index.xml

<Alloy> 
<Window class="container"> 
    <TableView> 
     <TableViewRow> 
      <TextField id="user" borderStyle="Ti.UI.INPUT_BORDERSTYLE_ROUNDED" color="#336699" top="10" left="10" width="250" height="60" /> 
     </TableViewRow> 
     <TableViewRow> 
      <TextField id="password" borderStyle="Ti.UI.INPUT_BORDERSTYLE_ROUNDED" color="#336699" top="10" left="10" width="250" height="60" /> 
     </TableViewRow> 
     <TableViewRow> 
      <Button id="loginBtn" onClick="doLogin" title="Login" /> 
     </TableViewRow> 
    </TableView> 

    <Menu id="menu" platform="android"> 

    <MenuItem id="addBook" 
    title="Nuovo Utente" 
    onClick="addNewuser" 
    showAsAction="Ti.Android.SHOW_AS_ACTION_IF_ROOM" /> 
    </Menu> 

    <View id="view_indicator"> 
     <ActivityIndicator id="ind" message="Loading..."/> 
    </View> 
</Window> 
</Alloy> 

이며,이 index.js이 코드

loginReq = Titanium.Network.createHTTPClient(); 

loginReq.onload = function() { 
var json = this.responseText; 
var response = JSON.parse(json); 
if (response.logged == true) { 
    alert("it's all ok"); 

} else { 
    alert(response.message); 
} 
$.view_indicator.hide(); 
} 

function doLogin(e) { 

if ($.user.value != '' && $.password.value != '') { 
    loginReq.open("POST", "http://solimeo.sviluppofacile.it/login.php"); 
    var params = { 
     username: $.user.value, 
     password: Ti.Utils.md5HexDigest($.password.value) 
    }; 
    $.view_indicator.show(); 
    loginReq.send(params); 
} else { 
    alert("Username/Pasword are required"); 
}; 
$.user.blur(); 
$.password.blur(); 
} 

function addNewuser() { 

var addnewuser = Alloy.createController("newuser").getView(); 
addnewuser.open(); 

} 

$.index.open(); 

이 모든 것이 잘 작동합니다. 내 문제는 loginReq.onload, index.js에있는 새 컨트롤러를 열려고 할 때입니다.

사용자 정보를 표시하기 위해 loggedin.js 컨트롤러를 새로 만들었습니다. 열려고합니다. 그러나 콘솔에 많은 오류가 있습니다. 나는 문제가 컨트롤러가 될 수 있다고 생각하지만, 내가 해결 한 오류가

[ERROR] : TiHttpClient: (TiHttpClient-1) [13616,13616] HTTP Error (java.net.SocketException): recvfrom failed: ECONNRESET (Connection reset by peer) 
[ERROR] : TiHttpClient: java.net.SocketException: recvfrom failed: ECONNRESET (Connection reset by peer) 
[ERROR] : TiHttpClient: at libcore.io.IoBridge.maybeThrowAfterRecvfrom(IoBridge.java:545) 
[ERROR] : TiHttpClient: at libcore.io.IoBridge.recvfrom(IoBridge.java:509) 
[ERROR] : TiHttpClient: at java.net.PlainSocketImpl.read(PlainSocketImpl.java:488) 
[ERROR] : TiHttpClient: at java.net.PlainSocketImpl.access$000(PlainSocketImpl.java:46) 
[ERROR] : TiHttpClient: at java.net.PlainSocketImpl$PlainSocketInputStream.read(PlainSocketImpl.java:240) 
[ERROR] : TiHttpClient: at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:103) 
[ERROR] : TiHttpClient: at org.apache.http.impl.io.AbstractSessionInputBuffer.readLine(AbstractSessionInputBuffer.java:191) 
[ERROR] : TiHttpClient: at org.apache.http.impl.conn.DefaultResponseParser.parseHead(DefaultResponseParser.java:82) 
[ERROR] : TiHttpClient: at org.apache.http.impl.io.AbstractMessageParser.parse(AbstractMessageParser.java:174) 
[ERROR] : TiHttpClient: at org.apache.http.impl.AbstractHttpClientConnection.receiveResponseHeader(AbstractHttpClientConnection.java:180) 
[ERROR] : TiHttpClient: at org.apache.http.impl.conn.DefaultClientConnection.receiveResponseHeader(DefaultClientConnection.java:235) 
[ERROR] : TiHttpClient: at org.apache.http.impl.conn.AbstractClientConnAdapter.receiveResponseHeader(AbstractClientConnAdapter.java:259) 
[ERROR] : TiHttpClient: at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(HttpRequestExecutor.java:279) 
[ERROR] : TiHttpClient: at org.apache.http.protocol.HttpRequestExecutor.execute(HttpRequestExecutor.java:121) 
[ERROR] : TiHttpClient: at org.apache.http.impl.client.DefaultRequestDirector.executeOriginal(DefaultRequestDirector.java:1296) 
[ERROR] : TiHttpClient: at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:677) 
[ERROR] : TiHttpClient: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555) 
[ERROR] : TiHttpClient: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:653) 
[ERROR] : TiHttpClient: at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:637) 
[ERROR] : TiHttpClient: at ti.modules.titanium.network.TiHTTPClient$ClientRunnable.run(TiHTTPClient.java:1328) 
[ERROR] : TiHttpClient: at java.lang.Thread.run(Thread.java:841) 
[ERROR] : TiHttpClient: Caused by: libcore.io.ErrnoException: recvfrom failed: ECONNRESET (Connection reset by peer) 
[ERROR] : TiHttpClient: at libcore.io.Posix.recvfromBytes(Native Method) 
[ERROR] : TiHttpClient: at libcore.io.Posix.recvfrom(Posix.java:141) 
[ERROR] : TiHttpClient: at libcore.io.BlockGuardOs.recvfrom(BlockGuardOs.java:164) 
[ERROR] : TiHttpClient: at libcore.io.IoBridge.recvfrom(IoBridge.java:506) 
[ERROR] : TiHttpClient: ... 19 more 

답변

0

입니다

좋은 및 테스트 컨트롤러에게 문제를 호출 addNewuser() 함수를 호출하면 내가 같은 오류를했습니다 .

$.view_indicator.hide();if...else 블록으로 이동했습니다.

그래서 올바른 코드는 loginReq.onload에 대한

loginReq.onload = function() { 
var json = this.responseText; 
var response = JSON.parse(json); 
if (response.logged == true) { 
    var args = { 

     name: response.name, 
     email: response.email 
    }; 
    var loggedUser = Alloy.createController("loggedin", args).getView(); 
    loggedUser.open(); 
    $.view_indicator.hide(); 

} else { 
    alert(response.message); 
    $.view_indicator.hide(); 
} 

} 
입니다
관련 문제