Android App Entwicklung idoit



  • Hallo,

    für mein Studium (Projektarbeit/Bachelorarbeit) habe ich die Aufgabe, eine Applikation für Android zu schreiben, mit der man auf die Datenbank i-doit zugreifen kann. Dies ist mein erstes Projekt im Bezug auf Android und JSON. Das Dokument mit der technischen Erläuterung der "i-doit JSON RPC API" hilft mir leider nur bedingt weiter. Ich versuche per HTTP Post auf die demo-Datenbank zuzugreifen, jedoch weiß ich nicht, in wiefern ich die params und den api-key bzw. Nick/PW einbinden soll. Ebenfalls weiß ich nicht, ob ich die richtige URL verwende, da ich ständig als Request-Objekt einen Text mit "400 Bad Request"-Nachricht bekomme.

    Folgendermaßen sieht mein Code aus:

    
    @Override
    protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_startscreen);
    
            //Aufruf der execute-Methode (Ist die übergebene URL  richtig?)
            new DownloadTextTask().execute("http://demo.i-doit.com/src/jsonrpc.php");
    }
    
    public InputStream OpenHttpPOSTConnection(String url){
            InputStream inputStream = null;
            HttpClient httpClient = new DefaultHttpClient();
            try{
    
                HttpPost httpPost = new HttpPost(url);
    
                // HTTP Post Header (Was muss alles per Header mitgegeben werden und stimmt die URL?)
                httpPost.addHeader("Host","http://demo.i-doit.com/src/jsonrpc.php");
                httpPost.addHeader("Content-Type", "application/json-rpc");
                httpPost.addHeader("X-RPC-Auth-Username","admin");
                httpPost.addHeader("X-RPC-Auth-Password","admin");
    
                // JSON Objekt mit Schlüsselwertpaaren (Sind die SWP vollständig und korrekt?)
                JSONObject json = new JSONObject();
                HashMap <string, string="">map = new HashMap();
                map.put("apikey","c1ia5q");
                map.put("objID","4438");
                map.put("catgID", "41");
                json.put("method","cmdb.category");
                json.put("version","2.0");
                json.put("id","1");
                json.put("params",map);
    
                // JSON Objekt an HTTP Post übergeben
                StringEntity params =new StringEntity(json.toString());
                httpPost.setEntity(params);
    
                HttpResponse httpResponse = httpClient.execute(httpPost);
                inputStream = httpResponse.getEntity().getContent();
    
            }catch(Exception e){
                Log.d("OpenHttpPOSTConnection", e.getLocalizedMessage());
            }finally {
                httpClient.getConnectionManager().shutdown();
            }
            return inputStream;
        }
    
        private String DownloadText(String URL){
            int BUFFER_SIZE = 2000;
            InputStream in = null;
            try{
                in = OpenHttpPOSTConnection(URL);
            }catch (Exception e){
                Log.d("Networking", e.getLocalizedMessage());
                return "";
            }
    
            InputStreamReader isr = new InputStreamReader(in);
            int charRead;
            String str = "";
            char[] inputBuffer = new char[BUFFER_SIZE];
            try{
                while ((charRead = isr.read(inputBuffer))>0){
                    String readString = String.copyValueOf(inputBuffer, 0, charRead);
                    str += readString;
                    inputBuffer = new char[BUFFER_SIZE];
                }
                in.close();
            }catch (IOException e){
                Log.d("DownloadText", e.getLocalizedMessage());
                return "";
            }
            return str;
        }
    
        private class DownloadTextTask extends AsyncTask<string, void,="" string="">{
            protected String doInBackground(String... urls){
                return DownloadText(urls[0]);
            }
    
            @Override
            protected void onPostExecute(String result) {
                // Ausgabe des JSON-Objekts vom Server als String im Textfeld der Android-App
                EditText editText = (EditText)findViewById(R.id.editText_output);
                editText.setText(result);
            }
        }</string,></string,> 
    

    Ich wäre sehr dankbar, wenn mir jemand zeigen könnte, wo meine Fehler liegen.


Log in to reply
 

Looks like your connection to Community was lost, please wait while we try to reconnect.