java - mapper.writeValue() 方法出错

标签 java android json jackson google-cloud-messaging

我正在开发一个 Java 应用程序作为 Google Cloud Messaging Android 应用程序中的服务器。 我一直在关注 tutorial我成功地完成了本教程的其余部分。

我的 Java 应用程序有三个类,它们是 Content.java、POST2GCM.java 和 App.java。这些类的作用与名称所描述的相同。

Content.java 类如下。

package com.hmkcode.vo;

import java.io.Serializable;
import java.util.HashMap;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;

public class Content implements Serializable {

    private List<String> registration_ids;
    private Map<String,String> data;

    public void addRegId(String regId){
        if(registration_ids == null)
            registration_ids = new LinkedList<String>();
        registration_ids.add(regId);
    }

    public void createData(String title, String message){
        if(data == null)
            data = new HashMap<String,String>();

        data.put("title", title);
        data.put("message", message);
    }
}

App.java类在下面

package com.hmkcode.vo;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.hmkcode.vo.Content;

public class App
{
    public static void main( String[] args )
    {
        System.out.println( "Sending POST to GCM" );

        String apiKey = "AIzaSyB8azikXJKi_NjpWcVNJVO0d........";
        Content content = createContent();

        POST2GCM.post(apiKey, content);
    }

    public static Content createContent(){

        Content c = new Content();

        c.addRegId("APA91bFqnQzp0z5IpXWdth1lagGQZw1PTbdBAD13c-UQ0T76BBYVsFrY96MA4SFduBW9RzDguLaad-7l4QWluQcP6zSoX1HSUaAzQYSmI93....");
        c.createData("Test Title", "Test Message");

        return c;
    }
}

POST2GCM.java 类如下

package com.hmkcode.vo;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import com.fasterxml.jackson.databind.*;
public class POST2GCM {

    public static void post(String apiKey, Content content){

        try{

        // 1. URL
        URL url = new URL("https://android.googleapis.com/gcm/send");

        // 2. Open connection
        HttpURLConnection conn = (HttpURLConnection) url.openConnection();

        // 3. Specify POST method
        conn.setRequestMethod("POST");

        // 4. Set the headers
        conn.setRequestProperty("Content-Type", "application/json");
        conn.setRequestProperty("Authorization", "key="+apiKey);

        conn.setDoOutput(true);

            // 5. Add JSON data into POST request body

            //`5.1 Use Jackson object mapper to convert Content object into JSON
            ObjectMapper mapper = new ObjectMapper();

            // 5.2 Get connection output stream
            DataOutputStream wr = new DataOutputStream(conn.getOutputStream());

            // 5.3 Copy Content "JSON" into

            mapper.writeValue(wr,content);

            // 5.4 Send the request
            wr.flush();

            // 5.5 close
            wr.close();

            // 6. Get the response
            int responseCode = conn.getResponseCode();
            System.out.println("\nSending 'POST' request to URL : " + url);
            System.out.println("Response Code : " + responseCode);

            BufferedReader in = new BufferedReader(
                    new InputStreamReader(conn.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();

            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();

            // 7. Print result
            System.out.println(response.toString());

            } catch (MalformedURLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
}

问题出现在 POST2GCM.java 类中,在行中

mapper.writeValue(wr,content);

建议添加 try catch block ,向方法签名添加异常,添加 catch 子句。 我做了所有没有解决问题的建议。

这里会出现什么问题?

最佳答案

您需要将jackson-core-2.4.3.jar 库文件添加到您的项目中。 也将它添加到您的 java 构建路径中。

当然...2.4.3是我用的版本,但它应该适用于以前的版本。

关于java - mapper.writeValue() 方法出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24889998/

相关文章:

java - 无法在 Android 中使用 BroadcastReceiver 上下文初始化接口(interface)

java - 处理java错误

java - JOOQ mysql按位

Android 加载图像作为布局背景会导致应用程序崩溃

java - Ajax 调用中返回 null json

java - gson - 如何比较 JsonObjects 忽略几个节点?

java - Android week 查看如何获取下一周和上一周的所有天数

android - Xamarin/Visual Studio 2017 应用程序部署成功,但在 android 模拟器中没有显示应用程序?

java - 如何在android中创建两个固定大小的 View 和跨越它们之间的一个 View ?

javascript - Shopify - 我可以从浏览器控制台访问 JSON 对象,但不能从主题文件访问